#pragma once
#include "utils.h"
#include "DetectorRegiones.h"
#include "ReconocimientoForm.h"


namespace Thesis_3 {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for DeteccionForm
	/// </summary>
	public ref class DeteccionForm : public System::Windows::Forms::Form
	{
	public:
		DeteccionForm(void)
		{
			detector = new DetectorRegiones();
			contornos = new vector<Mat>();
			cuadrilateros = new vector<Mat>();
			perspectivas = new vector<Mat>();
			nContorno = 0;
			nCuadrilatero = 0;
			InitializeComponent();
			detector->deltaThresholdHough = 35;//max_trackbar;
			detector->deltaThresholdCannyLow = 15;//max_thresh;
			detector->deltaThresholdCannyHigh = 140;//max_thresh;
			detector->lineLength = 40;
			detector->deltaTiempo = 0;
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~DeteccionForm()
		{
			if (components)
			{
				delete components;
			}
			delete imagenPreprocesada;
			delete imagenColor;
			delete detector;
			if (contornos != NULL)
				delete contornos;
			if (cuadrilateros != NULL)
				delete cuadrilateros;
			if (perspectivas != NULL)
				delete perspectivas;
		}
	private: System::Windows::Forms::PictureBox^  imagenDeteccion;
	public:
		Mat *imagenPreprocesada;
		Mat *imagenColor;
		DetectorRegiones* detector;
		vector<Mat> *contornos;
		vector<Mat> *cuadrilateros;
		vector<Mat> *perspectivas;
		int nContorno;
		int nCuadrilatero;
		int nPlacaPosible;
	private: System::Windows::Forms::GroupBox^  grupoNavegacionContorno;
	private: System::Windows::Forms::Button^  botonContornoAnterior;
	private: System::Windows::Forms::Button^  botonContornoSiguiente;
	public: 

	public: 


	private: System::Windows::Forms::Label^  labelContorno;
	private: System::Windows::Forms::Button^  botonDetectar;


	private: System::Windows::Forms::GroupBox^  grupoNavegacionCuadrilatero;
	private: System::Windows::Forms::Button^  botonCuadrilateroAnterior;


	private: System::Windows::Forms::Button^  botonCuadrilateroSiguiente;

	private: System::Windows::Forms::Label^  labelCuadrilatero;
	private: System::Windows::Forms::CheckBox^  checkContornos;
	private: System::Windows::Forms::CheckBox^  checkCuadrilateros;
	private: System::Windows::Forms::GroupBox^  grupoNavegacionPlacaPerspectiva;
	private: System::Windows::Forms::CheckBox^  checkPlacasPosibles;


	private: System::Windows::Forms::Button^  botonPlacaAnterior;
	private: System::Windows::Forms::Button^  botonPlacaSiguiente;
	private: System::Windows::Forms::Label^  labelPlacasPosibles;
	private: System::Windows::Forms::Button^  botonSiguienteEtapa;
	private: System::Windows::Forms::MenuStrip^  menuStrip1;
	private: System::Windows::Forms::ToolStripMenuItem^  guardarImagenToolStripMenuItem;






	protected: 

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->imagenDeteccion = (gcnew System::Windows::Forms::PictureBox());
			this->grupoNavegacionContorno = (gcnew System::Windows::Forms::GroupBox());
			this->checkContornos = (gcnew System::Windows::Forms::CheckBox());
			this->botonContornoAnterior = (gcnew System::Windows::Forms::Button());
			this->botonContornoSiguiente = (gcnew System::Windows::Forms::Button());
			this->labelContorno = (gcnew System::Windows::Forms::Label());
			this->botonDetectar = (gcnew System::Windows::Forms::Button());
			this->grupoNavegacionCuadrilatero = (gcnew System::Windows::Forms::GroupBox());
			this->checkCuadrilateros = (gcnew System::Windows::Forms::CheckBox());
			this->botonCuadrilateroAnterior = (gcnew System::Windows::Forms::Button());
			this->botonCuadrilateroSiguiente = (gcnew System::Windows::Forms::Button());
			this->labelCuadrilatero = (gcnew System::Windows::Forms::Label());
			this->grupoNavegacionPlacaPerspectiva = (gcnew System::Windows::Forms::GroupBox());
			this->checkPlacasPosibles = (gcnew System::Windows::Forms::CheckBox());
			this->botonPlacaAnterior = (gcnew System::Windows::Forms::Button());
			this->botonPlacaSiguiente = (gcnew System::Windows::Forms::Button());
			this->labelPlacasPosibles = (gcnew System::Windows::Forms::Label());
			this->botonSiguienteEtapa = (gcnew System::Windows::Forms::Button());
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
			this->guardarImagenToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->imagenDeteccion))->BeginInit();
			this->grupoNavegacionContorno->SuspendLayout();
			this->grupoNavegacionCuadrilatero->SuspendLayout();
			this->grupoNavegacionPlacaPerspectiva->SuspendLayout();
			this->menuStrip1->SuspendLayout();
			this->SuspendLayout();
			// 
			// imagenDeteccion
			// 
			this->imagenDeteccion->Location = System::Drawing::Point(276, 36);
			this->imagenDeteccion->Name = L"imagenDeteccion";
			this->imagenDeteccion->Size = System::Drawing::Size(980, 703);
			this->imagenDeteccion->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;
			this->imagenDeteccion->TabIndex = 1;
			this->imagenDeteccion->TabStop = false;
			// 
			// grupoNavegacionContorno
			// 
			this->grupoNavegacionContorno->Controls->Add(this->checkContornos);
			this->grupoNavegacionContorno->Controls->Add(this->botonContornoAnterior);
			this->grupoNavegacionContorno->Controls->Add(this->botonContornoSiguiente);
			this->grupoNavegacionContorno->Controls->Add(this->labelContorno);
			this->grupoNavegacionContorno->Location = System::Drawing::Point(12, 114);
			this->grupoNavegacionContorno->Name = L"grupoNavegacionContorno";
			this->grupoNavegacionContorno->Size = System::Drawing::Size(241, 172);
			this->grupoNavegacionContorno->TabIndex = 7;
			this->grupoNavegacionContorno->TabStop = false;
			this->grupoNavegacionContorno->Text = L"Contornos";
			// 
			// checkContornos
			// 
			this->checkContornos->AutoSize = true;
			this->checkContornos->Enabled = false;
			this->checkContornos->Location = System::Drawing::Point(9, 40);
			this->checkContornos->Name = L"checkContornos";
			this->checkContornos->Size = System::Drawing::Size(119, 21);
			this->checkContornos->TabIndex = 4;
			this->checkContornos->Text = L"Ver contornos";
			this->checkContornos->UseVisualStyleBackColor = true;
			this->checkContornos->Visible = false;
			this->checkContornos->CheckedChanged += gcnew System::EventHandler(this, &DeteccionForm::checkContornos_CheckedChanged);
			// 
			// botonContornoAnterior
			// 
			this->botonContornoAnterior->Enabled = false;
			this->botonContornoAnterior->Location = System::Drawing::Point(8, 85);
			this->botonContornoAnterior->Name = L"botonContornoAnterior";
			this->botonContornoAnterior->Size = System::Drawing::Size(99, 49);
			this->botonContornoAnterior->TabIndex = 1;
			this->botonContornoAnterior->Text = L"Anterior";
			this->botonContornoAnterior->UseVisualStyleBackColor = true;
			this->botonContornoAnterior->Click += gcnew System::EventHandler(this, &DeteccionForm::botonContornoAnterior_Click);
			// 
			// botonContornoSiguiente
			// 
			this->botonContornoSiguiente->Enabled = false;
			this->botonContornoSiguiente->Location = System::Drawing::Point(126, 85);
			this->botonContornoSiguiente->Name = L"botonContornoSiguiente";
			this->botonContornoSiguiente->Size = System::Drawing::Size(99, 49);
			this->botonContornoSiguiente->TabIndex = 2;
			this->botonContornoSiguiente->Text = L"Siguiente";
			this->botonContornoSiguiente->UseVisualStyleBackColor = true;
			this->botonContornoSiguiente->Click += gcnew System::EventHandler(this, &DeteccionForm::botonContornoSiguiente_Click);
			// 
			// labelContorno
			// 
			this->labelContorno->AutoSize = true;
			this->labelContorno->Location = System::Drawing::Point(6, 40);
			this->labelContorno->Name = L"labelContorno";
			this->labelContorno->Size = System::Drawing::Size(0, 17);
			this->labelContorno->TabIndex = 3;
			// 
			// botonDetectar
			// 
			this->botonDetectar->Location = System::Drawing::Point(12, 36);
			this->botonDetectar->Name = L"botonDetectar";
			this->botonDetectar->Size = System::Drawing::Size(241, 49);
			this->botonDetectar->TabIndex = 5;
			this->botonDetectar->Text = L"Iniciar";
			this->botonDetectar->UseVisualStyleBackColor = true;
			this->botonDetectar->Click += gcnew System::EventHandler(this, &DeteccionForm::botonPreprocesar_Click);
			// 
			// grupoNavegacionCuadrilatero
			// 
			this->grupoNavegacionCuadrilatero->Controls->Add(this->checkCuadrilateros);
			this->grupoNavegacionCuadrilatero->Controls->Add(this->botonCuadrilateroAnterior);
			this->grupoNavegacionCuadrilatero->Controls->Add(this->botonCuadrilateroSiguiente);
			this->grupoNavegacionCuadrilatero->Controls->Add(this->labelCuadrilatero);
			this->grupoNavegacionCuadrilatero->Location = System::Drawing::Point(12, 292);
			this->grupoNavegacionCuadrilatero->Name = L"grupoNavegacionCuadrilatero";
			this->grupoNavegacionCuadrilatero->Size = System::Drawing::Size(241, 172);
			this->grupoNavegacionCuadrilatero->TabIndex = 8;
			this->grupoNavegacionCuadrilatero->TabStop = false;
			this->grupoNavegacionCuadrilatero->Text = L"Cuadrilateros";
			// 
			// checkCuadrilateros
			// 
			this->checkCuadrilateros->AutoSize = true;
			this->checkCuadrilateros->Location = System::Drawing::Point(9, 39);
			this->checkCuadrilateros->Name = L"checkCuadrilateros";
			this->checkCuadrilateros->Size = System::Drawing::Size(138, 21);
			this->checkCuadrilateros->TabIndex = 5;
			this->checkCuadrilateros->Text = L"Ver cuadrilateros";
			this->checkCuadrilateros->UseVisualStyleBackColor = true;
			this->checkCuadrilateros->Visible = false;
			this->checkCuadrilateros->CheckedChanged += gcnew System::EventHandler(this, &DeteccionForm::checkCuadrilateros_CheckedChanged);
			// 
			// botonCuadrilateroAnterior
			// 
			this->botonCuadrilateroAnterior->Enabled = false;
			this->botonCuadrilateroAnterior->Location = System::Drawing::Point(8, 85);
			this->botonCuadrilateroAnterior->Name = L"botonCuadrilateroAnterior";
			this->botonCuadrilateroAnterior->Size = System::Drawing::Size(99, 49);
			this->botonCuadrilateroAnterior->TabIndex = 1;
			this->botonCuadrilateroAnterior->Text = L"Anterior";
			this->botonCuadrilateroAnterior->UseVisualStyleBackColor = true;
			this->botonCuadrilateroAnterior->Click += gcnew System::EventHandler(this, &DeteccionForm::botonCuadrilateroAnterior_Click);
			// 
			// botonCuadrilateroSiguiente
			// 
			this->botonCuadrilateroSiguiente->Enabled = false;
			this->botonCuadrilateroSiguiente->Location = System::Drawing::Point(126, 85);
			this->botonCuadrilateroSiguiente->Name = L"botonCuadrilateroSiguiente";
			this->botonCuadrilateroSiguiente->Size = System::Drawing::Size(99, 49);
			this->botonCuadrilateroSiguiente->TabIndex = 2;
			this->botonCuadrilateroSiguiente->Text = L"Siguiente";
			this->botonCuadrilateroSiguiente->UseVisualStyleBackColor = true;
			this->botonCuadrilateroSiguiente->Click += gcnew System::EventHandler(this, &DeteccionForm::botonCuadrilateroSiguiente_Click);
			// 
			// labelCuadrilatero
			// 
			this->labelCuadrilatero->AutoSize = true;
			this->labelCuadrilatero->Location = System::Drawing::Point(6, 40);
			this->labelCuadrilatero->Name = L"labelCuadrilatero";
			this->labelCuadrilatero->Size = System::Drawing::Size(0, 17);
			this->labelCuadrilatero->TabIndex = 3;
			this->labelCuadrilatero->Visible = false;
			// 
			// grupoNavegacionPlacaPerspectiva
			// 
			this->grupoNavegacionPlacaPerspectiva->Controls->Add(this->checkPlacasPosibles);
			this->grupoNavegacionPlacaPerspectiva->Controls->Add(this->botonPlacaAnterior);
			this->grupoNavegacionPlacaPerspectiva->Controls->Add(this->botonPlacaSiguiente);
			this->grupoNavegacionPlacaPerspectiva->Controls->Add(this->labelPlacasPosibles);
			this->grupoNavegacionPlacaPerspectiva->Location = System::Drawing::Point(12, 470);
			this->grupoNavegacionPlacaPerspectiva->Name = L"grupoNavegacionPlacaPerspectiva";
			this->grupoNavegacionPlacaPerspectiva->Size = System::Drawing::Size(241, 172);
			this->grupoNavegacionPlacaPerspectiva->TabIndex = 9;
			this->grupoNavegacionPlacaPerspectiva->TabStop = false;
			this->grupoNavegacionPlacaPerspectiva->Text = L"Placas en perspectiva";
			// 
			// checkPlacasPosibles
			// 
			this->checkPlacasPosibles->AutoSize = true;
			this->checkPlacasPosibles->Location = System::Drawing::Point(9, 39);
			this->checkPlacasPosibles->Name = L"checkPlacasPosibles";
			this->checkPlacasPosibles->Size = System::Drawing::Size(153, 21);
			this->checkPlacasPosibles->TabIndex = 5;
			this->checkPlacasPosibles->Text = L"Ver placas posibles";
			this->checkPlacasPosibles->UseVisualStyleBackColor = true;
			this->checkPlacasPosibles->Visible = false;
			this->checkPlacasPosibles->CheckedChanged += gcnew System::EventHandler(this, &DeteccionForm::checkPlacasPosibles_CheckedChanged);
			// 
			// botonPlacaAnterior
			// 
			this->botonPlacaAnterior->Enabled = false;
			this->botonPlacaAnterior->Location = System::Drawing::Point(8, 85);
			this->botonPlacaAnterior->Name = L"botonPlacaAnterior";
			this->botonPlacaAnterior->Size = System::Drawing::Size(99, 49);
			this->botonPlacaAnterior->TabIndex = 1;
			this->botonPlacaAnterior->Text = L"Anterior";
			this->botonPlacaAnterior->UseVisualStyleBackColor = true;
			this->botonPlacaAnterior->Click += gcnew System::EventHandler(this, &DeteccionForm::botonPlacaAnterior_Click);
			// 
			// botonPlacaSiguiente
			// 
			this->botonPlacaSiguiente->Enabled = false;
			this->botonPlacaSiguiente->Location = System::Drawing::Point(126, 85);
			this->botonPlacaSiguiente->Name = L"botonPlacaSiguiente";
			this->botonPlacaSiguiente->Size = System::Drawing::Size(99, 49);
			this->botonPlacaSiguiente->TabIndex = 2;
			this->botonPlacaSiguiente->Text = L"Siguiente";
			this->botonPlacaSiguiente->UseVisualStyleBackColor = true;
			this->botonPlacaSiguiente->Click += gcnew System::EventHandler(this, &DeteccionForm::botonPlacaSiguiente_Click);
			// 
			// labelPlacasPosibles
			// 
			this->labelPlacasPosibles->AutoSize = true;
			this->labelPlacasPosibles->Location = System::Drawing::Point(6, 40);
			this->labelPlacasPosibles->Name = L"labelPlacasPosibles";
			this->labelPlacasPosibles->Size = System::Drawing::Size(0, 17);
			this->labelPlacasPosibles->TabIndex = 3;
			this->labelPlacasPosibles->Visible = false;
			// 
			// botonSiguienteEtapa
			// 
			this->botonSiguienteEtapa->Enabled = false;
			this->botonSiguienteEtapa->Location = System::Drawing::Point(12, 658);
			this->botonSiguienteEtapa->Name = L"botonSiguienteEtapa";
			this->botonSiguienteEtapa->Size = System::Drawing::Size(241, 71);
			this->botonSiguienteEtapa->TabIndex = 10;
			this->botonSiguienteEtapa->Text = L"Continuar a reconocimiento";
			this->botonSiguienteEtapa->UseVisualStyleBackColor = true;
			this->botonSiguienteEtapa->Click += gcnew System::EventHandler(this, &DeteccionForm::botonSiguienteEtapa_Click);
			// 
			// menuStrip1
			// 
			this->menuStrip1->Enabled = false;
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->guardarImagenToolStripMenuItem});
			this->menuStrip1->Location = System::Drawing::Point(0, 0);
			this->menuStrip1->Name = L"menuStrip1";
			this->menuStrip1->Size = System::Drawing::Size(1268, 28);
			this->menuStrip1->TabIndex = 11;
			this->menuStrip1->Text = L"menuStrip1";
			// 
			// guardarImagenToolStripMenuItem
			// 
			this->guardarImagenToolStripMenuItem->Name = L"guardarImagenToolStripMenuItem";
			this->guardarImagenToolStripMenuItem->Size = System::Drawing::Size(128, 24);
			this->guardarImagenToolStripMenuItem->Text = L"Guardar Imagen";
			this->guardarImagenToolStripMenuItem->Click += gcnew System::EventHandler(this, &DeteccionForm::guardarImagenToolStripMenuItem_Click);
			// 
			// DeteccionForm
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(1268, 753);
			this->Controls->Add(this->menuStrip1);
			this->Controls->Add(this->botonSiguienteEtapa);
			this->Controls->Add(this->grupoNavegacionPlacaPerspectiva);
			this->Controls->Add(this->grupoNavegacionCuadrilatero);
			this->Controls->Add(this->botonDetectar);
			this->Controls->Add(this->grupoNavegacionContorno);
			this->Controls->Add(this->imagenDeteccion);
			this->Name = L"DeteccionForm";
			this->Text = L"DeteccionForm";
			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->imagenDeteccion))->EndInit();
			this->grupoNavegacionContorno->ResumeLayout(false);
			this->grupoNavegacionContorno->PerformLayout();
			this->grupoNavegacionCuadrilatero->ResumeLayout(false);
			this->grupoNavegacionCuadrilatero->PerformLayout();
			this->grupoNavegacionPlacaPerspectiva->ResumeLayout(false);
			this->grupoNavegacionPlacaPerspectiva->PerformLayout();
			this->menuStrip1->ResumeLayout(false);
			this->menuStrip1->PerformLayout();
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	public:
		void init(){
			detector->input_image_color = *(this->imagenColor);
			detector->processedImage = *(this->imagenPreprocesada);
			detector->hallarImagenesContornos(*(this->contornos));
			for (int i=0; i<contornos->size();i++){
				cvtColor(contornos->at(i),(*contornos)[i],CV_BGR2BGRA);
			}
			if (contornos->size() > 0){
				dibujarImagen(imagenDeteccion,contornos->at(0));
				this->botonContornoSiguiente->Enabled = true;
			}
			detector->hallarImagenesCorners(*(this->cuadrilateros));
			for (int i=0; i<cuadrilateros->size();i++){
				cvtColor(cuadrilateros->at(i),(*cuadrilateros)[i],CV_BGR2BGRA);
			}
			for (int i=0; i<cuadrilateros->size(); i++){
				vector<Point2f> poligono = detector->cornersGlobal->at(i);
				Mat placaPerspectiva = perspectiva(detector->input_image_color,poligono,distanceBetween(poligono[0],poligono[3])*4,distanceBetween(poligono[0],poligono[1])*4,i);
				if (!cumpleRatio(placaPerspectiva.cols,placaPerspectiva.rows,2,0.3,0.6)) continue; // Se ignora los que no cumplan el ratio
				cvtColor(placaPerspectiva,placaPerspectiva,CV_BGR2BGRA);
				perspectivas->push_back(placaPerspectiva);
			}
			this->menuStrip1->Enabled = true;
			this->botonSiguienteEtapa->Enabled = true;
			actualizarLabelContorno();
			actualizarLabelCuadrilatero();
			actualizarLabelPlacasPosibles();
		}
	private:
		System::Void botonPreprocesar_Click(System::Object^  sender, System::EventArgs^  e) {
			this->init();
			this->botonDetectar->Enabled = false;
			this->checkCuadrilateros->Visible = true;
			this->checkPlacasPosibles->Visible = true;
		}
	private: 
		void actualizarLabelContorno(){
			this->labelContorno->Text = "Contorno "+(nContorno+1)+" de "+contornos->size();
		}
		void actualizarLabelCuadrilatero(){
			this->labelCuadrilatero->Text = "Cuadrilatero "+(nCuadrilatero+1)+" de "+cuadrilateros->size();
		}
		void actualizarLabelPlacasPosibles(){
			this->labelPlacasPosibles->Text = "Placa detectada "+(nPlacaPosible+1)+" de "+perspectivas->size();
		}
	private: 
		System::Void checkContornos_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {
			if (this->checkContornos->Checked){
				this->checkCuadrilateros->Enabled = true;
				this->checkCuadrilateros->Visible = true;
				this->checkCuadrilateros->Checked = false;
				this->labelCuadrilatero->Visible = false;

				this->checkPlacasPosibles->Enabled = true;
				this->checkPlacasPosibles->Visible = true;
				this->checkPlacasPosibles->Checked = false;
				this->labelPlacasPosibles->Visible = false;

				this->checkContornos->Enabled = false;
				this->checkContornos->Visible = false;

				this->labelContorno->Visible = true;
				this->botonCuadrilateroAnterior->Enabled = false;
				this->botonCuadrilateroSiguiente->Enabled = false;
				this->botonPlacaAnterior->Enabled = false;
				this->botonPlacaSiguiente->Enabled = false;
				if (nContorno > 0)
					this->botonContornoAnterior->Enabled = true;
				if (nContorno < (this->contornos->size()-1))
					this->botonContornoSiguiente->Enabled = true;
				if (contornos->size() > 0)
					dibujarImagen(imagenDeteccion,contornos->at(nContorno));
			}
		} 
		System::Void checkCuadrilateros_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {
			if (this->checkCuadrilateros->Checked){
				this->checkContornos->Enabled = true;
				this->checkContornos->Visible = true;
				this->checkContornos->Checked = false;
				this->labelContorno->Visible = false;

				this->checkPlacasPosibles->Enabled = true;
				this->checkPlacasPosibles->Visible = true;
				this->checkPlacasPosibles->Checked = false;
				this->labelPlacasPosibles->Visible = false;

				this->checkCuadrilateros->Enabled = false;
				this->checkCuadrilateros->Visible = false;

				this->labelCuadrilatero->Visible = true;
				this->botonContornoAnterior->Enabled = false;
				this->botonContornoSiguiente->Enabled = false;
				this->botonPlacaAnterior->Enabled = false;
				this->botonPlacaSiguiente->Enabled = false;
				if (nCuadrilatero > 0)
					this->botonCuadrilateroAnterior->Enabled = true;
				if (nCuadrilatero < (this->cuadrilateros->size()-1))
					this->botonCuadrilateroSiguiente->Enabled = true;
				if (cuadrilateros->size() > 0)
					dibujarImagen(imagenDeteccion,cuadrilateros->at(nCuadrilatero));
			}
		}
	private: 
		System::Void checkPlacasPosibles_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {
			if (this->checkPlacasPosibles->Checked){
				this->checkContornos->Enabled = true;
				this->checkContornos->Visible = true;
				this->checkContornos->Checked = false;
				this->labelContorno->Visible = false;

				this->checkCuadrilateros->Enabled = true;
				this->checkCuadrilateros->Visible = true;
				this->checkCuadrilateros->Checked = false;
				this->labelCuadrilatero->Visible = false;

				this->checkPlacasPosibles->Enabled = false;
				this->checkPlacasPosibles->Visible = false;

				this->labelPlacasPosibles->Visible = true;
				this->botonPlacaAnterior->Enabled = false;
				this->botonPlacaSiguiente->Enabled = false;
				if (nPlacaPosible > 0)
					this->botonPlacaAnterior->Enabled = true;
				if (nPlacaPosible < (this->perspectivas->size()-1))
					this->botonPlacaSiguiente->Enabled = true;
				if (perspectivas->size() > 0)
					dibujarImagen(imagenDeteccion,perspectivas->at(nPlacaPosible));
			}
		}
		System::Void botonContornoAnterior_Click(System::Object^  sender, System::EventArgs^  e) {
			nContorno--;
			if (nContorno == 0)
				this->botonContornoAnterior->Enabled = false;
			else 
				this->botonContornoSiguiente->Enabled = true;
			dibujarImagen(imagenDeteccion,contornos->at(nContorno));
			actualizarLabelContorno();
		}
		System::Void botonContornoSiguiente_Click(System::Object^  sender, System::EventArgs^  e) {
			nContorno++;
			if (nContorno == contornos->size()-1)
				this->botonContornoSiguiente->Enabled = false;
			else 
				this->botonContornoAnterior->Enabled = true;
			dibujarImagen(imagenDeteccion,contornos->at(nContorno));
			actualizarLabelContorno();
		}
		System::Void botonCuadrilateroAnterior_Click(System::Object^  sender, System::EventArgs^  e) {
			nCuadrilatero--;
			if (nCuadrilatero == 0)
				this->botonCuadrilateroAnterior->Enabled = false;
			else 
				this->botonCuadrilateroSiguiente->Enabled = true;
			dibujarImagen(imagenDeteccion,cuadrilateros->at(nCuadrilatero));
			actualizarLabelCuadrilatero();
		}
		System::Void botonCuadrilateroSiguiente_Click(System::Object^  sender, System::EventArgs^  e) {
			nCuadrilatero++;
			if (nCuadrilatero == cuadrilateros->size()-1)
				this->botonCuadrilateroSiguiente->Enabled = false;
			else 
				this->botonCuadrilateroAnterior->Enabled = true;
			dibujarImagen(imagenDeteccion,cuadrilateros->at(nCuadrilatero));
			actualizarLabelCuadrilatero();
		}
		System::Void botonPlacaAnterior_Click(System::Object^  sender, System::EventArgs^  e) {
			nPlacaPosible--;
			if (nPlacaPosible == 0)
				this->botonPlacaAnterior->Enabled = false;
			else 
				this->botonPlacaSiguiente->Enabled = true;
			dibujarImagen(imagenDeteccion,perspectivas->at(nPlacaPosible));
			actualizarLabelPlacasPosibles();
		}
		System::Void botonPlacaSiguiente_Click(System::Object^  sender, System::EventArgs^  e) {
			nPlacaPosible++;
			if (nPlacaPosible == perspectivas->size()-1)
				this->botonPlacaSiguiente->Enabled = false;
			else 
				this->botonPlacaAnterior->Enabled = true;
			dibujarImagen(imagenDeteccion,perspectivas->at(nPlacaPosible));
			actualizarLabelPlacasPosibles();
		}
	private: System::Void botonSiguienteEtapa_Click(System::Object^  sender, System::EventArgs^  e) {
				 ReconocimientoForm^ ventanaReconocimiento = gcnew ReconocimientoForm();
				 ventanaReconocimiento->detector = this->detector;
				 this->Hide();
				 delete contornos;
				 contornos = NULL;
				 delete cuadrilateros;
				 cuadrilateros = NULL;
				 delete perspectivas;
				 perspectivas = NULL;
				 ventanaReconocimiento->ShowDialog();
				 this->Close();
			 }
	private: System::Void guardarImagenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
				 SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
				 saveFileDialog1->InitialDirectory = "\\";
				 saveFileDialog1->RestoreDirectory = true;
				 saveFileDialog1->FileName = "imagen_deteccion.jpg";
				 saveFileDialog1->Filter = "JPG files (*.jpg)|*.jpg|PNG files (*.png)|*.png";
				 if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
				 {
					 this->imagenDeteccion->Image->Save(saveFileDialog1->FileName);
				 }
			 }
	};
}
